/*
 * WoordenboekDAO.java
 *
 * Created on 24 februari 2008, 20:04
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package server.dataaccess;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;
import data.Woord;

/**
 *
 * @author Administrator
 */
public class WoordenboekDAO {
    
    private static Logger logger = Logger.getLogger(WoordenboekDAO.class);
    
    private static ResourceBundle bundle = ResourceBundle.getBundle("server.dataaccess.database");
    
    /** Creates a new instance of WoordenboekDAO */
    private WoordenboekDAO() {
    }
    
    public static ArrayList<Woord> getAlleWoorden(){
        ArrayList<Woord> woorden = new ArrayList<Woord>();
        String opdracht = "{call selectWoorden()}";
        
        try {
            CallableStatement cstmt = Database.getInstance().getConnection().prepareCall(opdracht);
            ResultSet rs = cstmt.executeQuery();
            while(rs.next()){
                Woord w = new Woord();
                w.setWoord(rs.getString(bundle.getString("woordenboek_woord")));
                
                woorden.add(w);
            }
            
            cstmt.close();
            logger.info("Alle woorden succesvol opgehaald uit de database");
        } catch (SQLException ex) {
            logger.error("Fout bij het ophalen van alle woorden uit de database!");
            logger.error(ex.getMessage());
        } finally{
            try {
                Database.getInstance().getConnection().close();
            } catch (SQLException ex) {
                logger.error("Fout bij het sluiten van de databaseconnectie!");
                logger.error(ex.getMessage());
            }
        }
        
        return woorden;
    }
    
    public static Woord getRandomWoord(){
        Woord woord = new Woord();
        String opdracht = "{call getRandomWoord()}";
        
        try {
            CallableStatement cstmt = Database.getInstance().getConnection().prepareCall(opdracht);
            ResultSet rs = cstmt.executeQuery();
            while(rs.next()){
                woord.setWoord(rs.getString(bundle.getString("woordenboek_woord")));
            }
            
            cstmt.close();
            logger.info("Alle woorden succesvol opgehaald uit de database");
        } catch (SQLException ex) {
            logger.error("Fout bij het ophalen van alle woorden uit de database!");
            logger.error(ex.getMessage());
        } finally{
            try {
                Database.getInstance().getConnection().close();
            } catch (SQLException ex) {
                logger.error("Fout bij het sluiten van de databaseconnectie!");
                logger.error(ex.getMessage());
            }
        }
        
        return woord;
    }
    
    public static ArrayList<Woord> getWoordenMetLengte(int lengte){
        ArrayList<Woord> woorden = new ArrayList<Woord>();
        String opdracht = "{call selectWoordenByLength(?)}";
        
        try {
            CallableStatement cstmt = Database.getInstance().getConnection().prepareCall(opdracht);
            cstmt.setInt(1,lengte);
            
            ResultSet rs = cstmt.executeQuery();
            while(rs.next()){
                Woord w = new Woord();
                w.setWoord(rs.getString(bundle.getString("woordenboek_woord")));
                
                woorden.add(w);
            }
            
            cstmt.close();
            logger.info("Woorden met lengte: " + lengte + " succesvol opgehaald uit de database");
        } catch (SQLException ex) {
            logger.error("Fout bij het ophalen van woorden met lengte: " + lengte + " uit de database!");
            logger.error(ex.getMessage());
        } finally{
            try {
                Database.getInstance().getConnection().close();
            } catch (SQLException ex) {
                logger.error("Fout bij het sluiten van de databaseconnectie!");
                logger.error(ex.getMessage());
            }
        }
        
        return woorden;
    }
    
    public static boolean getWoord(String woord){
        boolean gevonden = false;
        String opdracht = "{call selectWoord(?)}";
        
        try {
            CallableStatement cstmt = Database.getInstance().getConnection().prepareCall(opdracht);
            cstmt.setString(1,woord);
            
            ResultSet rs = cstmt.executeQuery();
            if(rs.next()){
                gevonden = true;
            }
            
            cstmt.close();
            if(gevonden){
                logger.info("Woord: " + woord + " gevonden in de database!");
            }else{
                logger.info("Woord: " + woord + " niet gevonden in de database!");
            }
        } catch (SQLException ex) {
            gevonden = false;
            logger.error("Fout bij het ophalen van woord: " + woord + " uit de database!");
            logger.error(ex.getMessage());
        } finally{
            try {
                Database.getInstance().getConnection().close();
            } catch (SQLException ex) {
                gevonden = false;
                logger.error("Fout bij het sluiten van de databaseconnectie!");
                logger.error(ex.getMessage());
            }
        }
        
        return gevonden;
    }
    
    public static void main(String[] args){
        //WoordenboekDAO.getWoordenMetLengte(3);
        
        System.out.println(WoordenboekDAO.getWoord("sdfds"));
    }
    
}
